package com.mf.utils;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateUtil {

    public static final String ISO_EXPANDED_DATE_FORMAT = "yyyy-MM-dd"; // 用于表示日期的ISO标准格式

    /**
     * 用于表示日期时间的格式字符串，格式为"yyyy-MM-dd HH:mm:ss"。
     */
    public static String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将指定的日期字符串转换为LocalDate对象。
     *
     * @param dateString 代表日期的字符串，格式为ISO标准日期格式（yyyy-MM-dd）。
     * @return 转换后的LocalDate对象。
     */
    public static LocalDate stringToDate(String dateString) {
        return stringToDate(dateString, ISO_EXPANDED_DATE_FORMAT);
    }

    public static String getToDate() {
        LocalDate currentDate = LocalDate.now();
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ISO_EXPANDED_DATE_FORMAT);
        // 格式化日期
        return currentDate.format(formatter);
    }

    /**
     * 将指定的日期字符串按照指定格式转换为LocalDate对象。
     *
     * @param dateString 代表日期的字符串。
     * @param format 日期字符串的格式。
     * @return 转换后的LocalDate对象。
     */
    public static LocalDate stringToDate(String dateString,String format){
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); // 根据指定格式创建DateTimeFormatter
        return LocalDate.parse(dateString, formatter); // 使用DateTimeFormatter解析日期字符串为LocalDate
    }

    public static String stringToDate(LocalDateTime date,String format){
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); // 根据指定格式创建DateTimeFormatter
        return date.format(formatter); // 使用DateTimeFormatter解析日期字符串为LocalDate
    }


    /**
     * 获取当前日期时间的LocalDateTime表示。
     *
     * @return 当前日期时间的LocalDateTime实例。
     */
    public static LocalDateTime stringToDateTime(){
        final Date date = new Date(); // 获取当前时间的Date对象
        final Instant instant = date.toInstant(); // 将Date对象转换为Instant对象
        final ZoneId zoneId = ZoneId.systemDefault(); // 获取系统默认时区
        final ZonedDateTime zonedDateTime = instant.atZone(zoneId); // 将Instant对象转换为带有时区的ZonedDateTime对象
        return zonedDateTime.toLocalDateTime(); // 从ZonedDateTime对象中提取LocalDateTime对象
    }

}
